https://www.filmweb.pl/user/HowToCarpeDiem
1 Pozyskanie danych i opis
Wykorzystałem dane z “PogromcówDanych”. Zawierają one oceny poszczególnych odcinków seriali z bazy IMDB.
Show the code
serialeIMDB <- as_tibble(serialeIMDB)
view(serialeIMDB)
serialeIMDB# A tibble: 20,122 × 8
id serial nazwa sezon odcinek ocena glosow imdbId
<int> <fct> <fct> <fct> <fct> <dbl> <dbl> <fct>
1 1 Breaking Bad Pilot 1 1 8.7 9357 tt090…
2 2 Breaking Bad Cat's in the Bag... 1 2 8.2 6506 tt090…
3 3 Breaking Bad ...And the Bag's in the… 1 3 8.3 6176 tt090…
4 4 Breaking Bad Cancer Man 1 4 7.9 5796 tt090…
5 5 Breaking Bad Gray Matter 1 5 7.9 5664 tt090…
6 6 Breaking Bad Crazy Handful of Nothin' 1 6 8.7 6521 tt090…
7 7 Breaking Bad A No-Rough-Stuff-Type D… 1 7 8.4 5732 tt090…
8 8 Breaking Bad Seven Thirty-Seven 2 1 8.1 5312 tt090…
9 9 Breaking Bad Grilled 2 2 8.7 6096 tt090…
10 10 Breaking Bad Bit by a Dead Bee 2 3 7.9 5025 tt090…
# ℹ 20,112 more rows
| Kolumna | Opis danych |
|---|---|
| id | Unikalny numer id |
| Serial | Nazwa serialu |
| Nazwa | Nazwa odcinka |
| Sezon | Numer sezonu |
| Odcinek | Numer odcinku |
| Ocena | Wysokość oceny użytkowników |
| Głosów | Liczba głosów użytkowników |
| imdbid | Unikalny numer id dla serialu |
2 Przetwarzanie potokowe
Wypisuję najlepiej ocenione odcinki z danymi, największą liczbę głosów, najwyższą ocenę oraz tworzę kolumnę z słowną oceną odcinka.
Show the code
serialeIMDB %>%
filter(ocena > 8.2, glosow > 5000) %>%
select(serial, nazwa, sezon, odcinek, ocena, glosow) %>%
group_by(ocena) -> NajlepszeOdc
NajlepszeOdc# A tibble: 111 × 6
# Groups: ocena [18]
serial nazwa sezon odcinek ocena glosow
<fct> <fct> <fct> <fct> <dbl> <dbl>
1 Breaking Bad Pilot 1 1 8.7 9357
2 Breaking Bad ...And the Bag's in the River 1 3 8.3 6176
3 Breaking Bad Crazy Handful of Nothin' 1 6 8.7 6521
4 Breaking Bad A No-Rough-Stuff-Type Deal 1 7 8.4 5732
5 Breaking Bad Grilled 2 2 8.7 6096
6 Breaking Bad Peekaboo 2 6 8.3 5499
7 Breaking Bad Better Call Saul 2 8 8.5 5519
8 Breaking Bad 4 Days Out 2 9 8.5 5513
9 Breaking Bad Phoenix 2 12 8.6 5548
10 Breaking Bad ABQ 2 13 8.6 5627
# ℹ 101 more rows
Show the code
serialeIMDB %>%
summarise(maxgl = max(glosow, na.rm = T),
maxoc = max(ocena, na.rm = T))# A tibble: 1 × 2
maxgl maxoc
<dbl> <dbl>
1 60011 10
Show the code
serialeIMDB %>%
mutate(kl_ocena = cut(ocena, breaks = 7, labels = c("Bardzo bardzo słabe", "Bardzo słabe", "Słabe", "Średnie", "Dobre", "Bardzo dobre", "Arcydzieło"))) -> seriale3 Interaktywna tabela
Dodana kolumna ocenia słownie dany odcinek, w 7 kategoriach : “Bardzo bardzo słabe”, “Bardzo słabe”, “Słabe”, “Średnie”, “Dobre”, “Bardzo dobre”, “Arcydzieło”.
Show the code
datatable(seriale)4 Funkcja
Funkcja liczy logarytm 2 stopnia dla iloczynu ocen i e od b, podzielonego przez sumę sin x i pierwiastek od najwyższej oceny. Na końcu jest dodawana największa liczba głosów.
Show the code
obliczenia <- function(ocenaBB, ocename, glosmax, b, x) {
x <- as.numeric(10)
b <- as.numeric(20)
ocename = mean(serialeIMDB$ocena)
glosmax = max(serialeIMDB$glosow)
((log2(ocenaBB) * exp(b)/sin(x) + sqrt(ocename))+glosmax)
plot(ocename, glosmax) ->obl2
return(obl2)
}
#$$((log2(ocenaBB) * exp(b)/sin(x) + sqrt(ocename))+glosmax) -> obl$$
#obl5 Pętla
Niestety przez problemy z pakietem dplyr, nie byłem w stanie doprowadzić do wyniku. Zostawiłem w poniższym stanie.
Show the code
setwd("D:/ProjektR_SPD_BazaOcen/CSV")
baza <- c("SpongeBob SquarePants", "Phineas and Ferb", "BoJack Horseman")
sezony <- c(13, 4, 6)
oceny <- c(7.2,7.6,8.6)
jeden <- data.frame(baza, sezony, oceny)
write.csv(jeden, "jeden.csv")
baza <- c("Chernobyl", "Rick and Morty", "The Queen's Gambit")
sezony <- c(1, 6, 1)
oceny <- c(8.9,8.6,8.2)
dwa <- data.frame(baza, sezony, oceny)
write.csv(dwa, "dwa.csv")
baza <- c("Cowboy Bepop", "Vikings", "When They See us")
sezony <- c(1, 6, 1)
oceny <- c(8.3,8.4,8.2)
trzy <- data.frame(baza, sezony, oceny)
write.csv(trzy, "trzy.csv")
#plikicsv <- c("jeden.csv", "dwa.csv", "trzy.csv")
# data_tibble <- tibble()
#plikicsv |>
# map_dfr(.x = _, .f = ~rio::import(file = .)) |>
#as_tibble
setwd("D:/ProjektR_SPD_BazaOcen")
# lista_csv <- dir()
#lista_csv
#df_list <- map(lista_csv, read_csv)
#df_list
#bind_rows(df_list)
#bind_rows(df_list, .id = 'baza')
#plikicsv <- dir("CSV")
#plikicsv
#bind_rows('plikicsv')
#dir_ls('plikicsv') %>%
#map_dfr(read_csv, .id = 'jeden')
#for(file in plikicsv) {}6 Wykresy
6.1 Wykres1
Show the code
seriale %>%
filter(serial == "Breaking Bad") %>%
select(sezon) -> sezonBB
seriale %>%
filter(serial == "Breaking Bad") %>%
select(ocena) -> ocenaBB
seriale %>%
filter(serial == "Breaking Bad") %>%
select(odcinek) -> odcinekBB
danewykres <- data.frame(sezonBB,ocenaBB, odcinekBB)
danewykres$sezon_i_odcinek <- paste(danewykres$sezon, danewykres$odcinek)
danewykres <- as.tibble(danewykres)
danewykres$sezon <- as.numeric(danewykres$sezon)
danewykres$odcinek <- as.numeric(danewykres$odcinek)
#danewykres$sezon_i_odcinek <- as.numeric(danewykres$sezon_i_odcinek)
danewykres %>%
ggplot(., aes(sezon, ocena)) +
geom_smooth(color = "black", size = 1.2, linetype = "solid") +
labs(title = "Średnia ocena sezonów Breaking Bad przez użytkowników",
x = "Sezon",
y = "Ocena") +
theme(title = element_text(size = 11, face = "bold.italic"),
axis.title.x = element_text(size = 12,
face = "italic"),
axis.title.y = element_text(size = 12,
face = "italic")) -> wykres1
wykres16.2 Wykres2
Show the code
seriale %>%
filter(serial == "Game of Thrones") %>%
select(ocena) -> ocenaGOT
view(ocenaGOT)
seriale %>%
filter(serial == "Game of Thrones") %>%
select(glosow) -> glosyGOT
danewykresgot <- data.frame(ocenaGOT, glosyGOT)
danewykresgot %>%
ggplot(., aes(glosow, ocena)) +
geom_point(size = 1.3, color = 2, pch = 18, cex = 2) +
labs(title = "Stosunek liczy głosów użytkowników do oceny odcinka Game of Thrones",
x = "Głosy",
y = "Ocena") +
theme(title = element_text(size = 11, face = "bold.italic"),
axis.title.x = element_text(size = 15,
face = "bold"),
axis.title.y = element_text(size = 15,
face = "bold"))-> wykres2
wykres2Show the code
# scale_x_continuous(limits = c(1,5))
# scale_y_continuous(limits = c(0,10))7 Wykres plotly
Wykres przedstawia średnią ocen w serwisie IMDB oraz zysk 3 najbardziej dochodowych filmów. Najpierw stworzyłem potrzebne dane, następnie wykres, dodałem do niego dodatkową kolumnę.
Show the code
Filmy2 <- c("Avatar", "Avengers: Endgame", "Titanic")
Dochód_w_USD <- as.numeric(c(2.9, 2.8, 2.2))
Średnia_ocen_IMDB <- c(7.9, 8.4, 7.9)
baza4 <- data_frame(Filmy2, Dochód_w_USD, Średnia_ocen_IMDB)
wyk3 <- plot_ly(baza4, x = ~Filmy2, y = ~Dochód_w_USD, type = 'bar', name = 'Dochód w mld USD')
wyk3 <- wyk3 %>% add_trace(y = ~Średnia_ocen_IMDB, name = 'Średnia ocen IMDB w skali 0-10')
wyk3 <- wyk3 %>% layout(yaxis = list(title = '0-10'), barmode = 'group')
wyk3